<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
    console.log("========= return 函数调用 =========");
    function add(x,y){
      return x+y;
      console.log("返回后面的代码");
      }

      console.log(add(2,3));

      console.log("========= 递归 =========");
      function fib(num) {
        if (num > 2) {
          return fib(num - 2) + fib(num - 1);
        }else {
          return 1;
          }
      }
      console.log(fib(6));

      console.log("====== 凡是可以使用值得地方，就能使用函数 ========");
      var option =add;

      function a(op) {
        return op;
        }

        a(add(8,9));

        console.log(a(add(8,9)));

        var b = {
          name : add,
        }
        console.log(b.name(5,6));

        console.log("======= name属性 ======");
        console.log("======= name属性返回紧跟在function关键字之后的那个函数名。========")

        function f1() {

}
console.log(f1.name);

var f2 = function () {

}

console.log(f2.name);

console.log("======= length属性 ======");
console.log("======= length属性返回函数预期传入的参数个数，用函数定义之中的参数个数 ======");

function f3(a,b,c,d,e){

}
console.log(f3.length);

console.log("======= 函数的toString方法返回函数的源码。========");
function f4() {
  a();
  b();
  c();
  d();
  }
  console.log(f4.toString());

  console.log("======= 利用这一点，可以变相体现多行字符串 =======")
  var f5 = function (val) {
    var arr = fn.toString().split('\n');
    return arr.slice(1,arr.length-1).join('\n');
    }
    function  f6() {
      /*
      这是一个多行注释
      */
    }

    console.log(f6.toString());
    console.log("====== 全局变量：在函数外=====");
    var name = "debang";
    function  f7() {
      return name;
    }
    function f8() {
      return name +"is good";
      }
      console.log(f7());
      console.log(f8());
      console.log(f7()+f8());
    </script>
  </body>
</html>
